﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using OpenTK.Graphics.OpenGL;
public unsafe class Linea : IEntidad
{
    protected float[] arrLinea;

    public Linea()
    {
        arrLinea = new float[9];
        this.Visible = true;
    }
	//propiedades
	private Colores _coloreadoBorde;
	public Colores ColoreadoBorde {
		get { return _coloreadoBorde; }
		set { _coloreadoBorde = value; }
	}

	private Estilo.Borde _tipoBorde;
	public Estilo.Borde TipoBorde {
		get { return this._tipoBorde; }
		set { this._tipoBorde = value; }
	}

	private Estilo.Forma _tipoForma;
	public Estilo.Forma TipoForma {
		get { return this._tipoForma; }
		set { this._tipoForma = value; }
	}

	private string _id;
	public string ID {
		get { return _id; }
		set { _id = value; }
	}

    private string _tabla;
    public string Tabla
    {
        get { return _tabla; }
        set { _tabla = value; }
    }

	private bool _visible;
	public bool Visible {
		get { return _visible; }
        set { _visible = value; }
	}

	private Coordenada _localizacion;
	public Coordenada Localizacion {
		get { return _localizacion; }
		set { 
            _localizacion = value;
            arrLinea[0] = _localizacion.X;
            arrLinea[1] = _localizacion.Y;
            arrLinea[2] = _localizacion.Z;
        }
	}

	private Coordenada _localizacion2;
	public Coordenada Localizacion2 {
		get { return _localizacion2; }
		set { 
            _localizacion2 = value;
            arrLinea[3] = _localizacion2.X;
            arrLinea[4] = _localizacion2.Y;
            arrLinea[5] = _localizacion2.Z;
        }
	}


	private Colores _coloreado;
	public Colores Coloreado {
		get { return _coloreado; }
		set { _coloreado = value; }
	}


	private float _radio;
	public float Radio {
		get { return _radio; }
		set { _radio = value; }
	}

	public unsafe void _pintar()
	{
		//Tamano de la linea y los puntos
        if (this.Visible)
        {
            fixed (float* apuntalinea = &arrLinea[0])
            {
                if ((this.CapaCanvas == null || this.CapaCanvas.Coloreado == null) && (this.Coloreado!=null))
                {
                    //GL.Color4f(this.Coloreado.Rojo, this.Coloreado.Verde, this.Coloreado.Azul, this.Coloreado.Alfa);
                    GL.EnableClientState(ArrayCap.ColorArray);
                    GL.ColorPointer(4, ColorPointerType.Float, 0, (IntPtr)this.Coloreado.ArregloColores());
                }
                //GL.LoadIdentity();
                GL.EnableClientState(ArrayCap.VertexArray);
                GL.VertexPointer(3, VertexPointerType.Float, 0, (IntPtr)apuntalinea);
                GL.DrawArrays(BeginMode.LineLoop, 0, 2);
                GL.DisableClientState(ArrayCap.VertexArray);
                GL.Flush();
            }
        }
	}

	private Capa _capa;
	public Capa CapaCanvas {
		get { return _capa; }
		set { _capa = value; }
	}

}